package eu.faircode.finegeotag; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.location.Geocoder; import android.net.Uri; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.provider.Settings; public class ActivitySettings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "FineGeotag.Settings"; public static final String PREF_ENABLED = "pref_enabled"; public static final String PREF_TOAST = "pref_toast"; public static final String PREF_ALTITUDE = "pref_altitude"; public static final String PREF_ACCURACY = "pref_accuracy"; public static final String PREF_TIMEOUT = "pref_timeout"; public static final String PREF_KNOWN = "pref_known"; public static final String PREF_CHECK = "pref_check"; public static final String PREF_VERSION = "pref_version"; public static final boolean DEFAULT_ENABLED = true; public static final boolean DEFAULT_TOAST = true; public static final boolean DEFAULT_ALTITUDE = true; public static final String DEFAULT_ACCURACY = "25"; // meters public static final String DEFAULT_TIMEOUT = "60"; // seconds public static final String DEFAULT_KNOWN = "240"; // minutes @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } @Override protected void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); SharedPreferences prefs = getPreferenceScreen().getSharedPreferences(); // Get preferences Preference pref_check = findPreference(PREF_CHECK); Preference pref_version = findPreference(PREF_VERSION); // Set summaries onSharedPreferenceChanged(prefs, PREF_ENABLED); onSharedPreferenceChanged(prefs, PREF_TOAST); onSharedPreferenceChanged(prefs, PREF_ALTITUDE); onSharedPreferenceChanged(prefs, PREF_ACCURACY); onSharedPreferenceChanged(prefs, PREF_TIMEOUT); onSharedPreferenceChanged(prefs, PREF_KNOWN); // Location settings Intent locationSettingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); if (getPackageManager().queryIntentActivities(locationSettingsIntent, 0).size() > 0) pref_check.setIntent(locationSettingsIntent); else pref_check.setEnabled(false); // Version Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())); if (getPackageManager().queryIntentActivities(playStoreIntent, 0).size() > 0) pref_version.setIntent(playStoreIntent); try { PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); pref_version.setSummary( pInfo.versionName + "/" + pInfo.versionCode + "\n" + getString(R.string.msg_geocoder) + " " + getString(Geocoder.isPresent() ? R.string.msg_yes : R.string.msg_no)); } catch (PackageManager.NameNotFoundException ignored) { } } @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { Preference pref = findPreference(key); // Remove empty string settings if (pref instanceof EditTextPreference) if ("".equals(prefs.getString(key, null))) { SharedPreferences.Editor edit = prefs.edit(); edit.remove(key); edit.apply(); } if (PREF_ENABLED.equals(key)) pref.setSummary(prefs.getBoolean(PREF_ENABLED, true) ? getString(R.string.summary_enabled) : null); else if (PREF_TOAST.equals(key)) pref.setSummary(prefs.getBoolean(PREF_TOAST, true) ? getString(R.string.summary_toast) : null); else if (PREF_ALTITUDE.equals(key)) pref.setSummary(prefs.getBoolean(PREF_ALTITUDE, true) ? getString(R.string.summary_altitude) : null); else if (PREF_ACCURACY.equals(key)) pref.setTitle(getString(R.string.title_accuracy, prefs.getString(key, DEFAULT_ACCURACY))); else if (PREF_TIMEOUT.equals(key)) pref.setTitle(getString(R.string.title_timeout, prefs.getString(key, DEFAULT_TIMEOUT))); else if (PREF_KNOWN.equals(key)) { ListPreference lpref = (ListPreference) pref; int index = lpref.findIndexOfValue(prefs.getString(key, DEFAULT_KNOWN)); pref.setTitle(getString(R.string.title_known, lpref.getEntries()[index])); } } }